package gis.lifay.sdk;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 *@ClassName StatisticsUtil
 *@Description TODO
 *@Author lifay
 *@Date 2021/11/5 16:44
 **/
public class StatisticsUtil {
//
//    /**
//     * 新二维数组（栅格数据）
//     * @param datas 一维数组
//     * @param rowSize 行 长度 3600
//     * @param colSize 列 长度 7200
//     * @return
//     */
//    public static  int[][] conversionArrays(int[] datas, long rowSize, long colSize) throws Exception {
//        if (rowSize * colSize != datas.length) {
//            throw new Exception("长度不符合！");
//        }
//        int[] ts = Arrays.copyOf(datas, 1);
//        int index = 0;
//        T[][] newdatas = new T[(int) rowSize][(int) colSize];
//        T[][] newdatas = getArray(Integer.class,rowSize)
//        for (int i = 0; i < rowSize; i++) {
//            T[] newdata = new T[(int) colSize];
//            for (int j = 0; j < colSize; j++) {
//                newdata[j] = datas[index];
//                index++;
//            }
//            newdatas[i] = newdata;
//        }
//        return newdatas;
//    }


    /**
     * 新二维数组（栅格数据）
     * @param datas 一维数组
     * @param rowSize 行 长度 3600
     * @param colSize 列 长度 7200
     * @return
     */
    public static int[][] conversionArrays(int[] datas, long rowSize, long colSize) throws Exception {
        if (rowSize * colSize != datas.length) {
            throw new Exception("长度不符合！");
        }
        int index = 0;
        int[][] newdatas = new int[(int) rowSize][(int) colSize];
        for (int i = 0; i < rowSize; i++) {
            int[] newdata = new int[(int) colSize];
            for (int j = 0; j < colSize; j++) {
                newdata[j] = datas[index];
                index++;
            }
            newdatas[i] = newdata;
        }
        return newdatas;
    }

    /**
     * 根据经度获取栅格x坐标
     * @param lon 经度
     * @param scaleFactor 比例系数
     * @return
     */
    public static long getX(float lon, double scaleFactor) {
        return (long) ((lon + 180) / scaleFactor);
    }

    /**
     * 根据纬度获取栅格y坐标
     * @param lat 经度
     * @param scaleFactor 比例系数
     * @return
     */
    public static long getY(float lat, double scaleFactor) {
        return (long) ((90 - lat) / scaleFactor);
    }

    /**
     * 统计计算
     * @param datas
     * @param vaildRange
     * @param fillValue
     * @param scaleFactor
     * @return
     */
    private static long statisticsCalculate(short[] datas, short[] vaildRange, short fillValue, double scaleFactor) throws Exception {
        if (vaildRange.length < 2) {
            throw new Exception("有效值必须两个");
        }
        float sum = 0;
        long vaildNum = 0;
        for (short data : datas) {
            if (fillValue == data || vaildRange[0] > data || data > vaildRange[1]) {
                continue;
            }
            //乘以比例系数
            double v = data * scaleFactor;
            sum += v;
            vaildNum++;
            System.out.println(v);
        }
        return (long) (sum / vaildNum);
    }
}